package com.lzw.tool;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class tableTool {
	public static void main(String[] args) {

		List<String> data = new ArrayList<String>();
		data.add("1111");
		data.add("   >单位");
		data.add("   >姓名");
		data.add("   >总分数");
		data.add("   >排名");
		data.add("业务发展类（80分）>集客移网用户目标完成率（25分）>完成值");
		data.add("业务发展类（80分）>集客移网用户目标完成率（25分）>目标值");
		data.add("业务发展类（80分）>集客移网用户目标完成率（25分）>完成率");
		data.add("激励约束类>实名制（-10分）>得分");
		data.add("激励约束类>升级投诉管控（-5分）>升级投诉率");
		data.add("激励约束类>升级投诉管控（-5分）>目标值");
		data.add("激励约束类>升级投诉管控（-5分）>得分");
		data.add("激励约束类>大项目突破（10分）>得分");
		data.add("激励约束类>得分1");
		data.add("激励约束类>得分1");
		System.out.println(list2Table(data));
	}
	public static String list2Table(List<String> data){
		StringBuffer sb = new StringBuffer();
		List<String[]> datas = data.stream()
				.map(s->s.split(">")).collect(Collectors.toList());
		//比较器
		Comparator<Integer> comparator = (x,y)->x-y;
		//找出生成的表格最大行数
		int maxRow = datas.stream().map(s->s.length)
				.collect(Collectors.maxBy(comparator))
				.get().intValue();

		//开始写表格
		sb.append("<table border=\"8\">");
		String[] str = null;
		String[] nextStr = null;
		int row=1;
		int col=1;
		String output = null;
		//是否是列合并单元格
		boolean isColspan = false;
		for(int i = 0; i<maxRow; i++){
			sb.append("<tr>");
			for(int j =0; j<datas.size() - 1; j++){
				//重新初始化单元格输出模板
				output = "<td rowspan=%s colspan=%s>%s</td>";
				str = datas.get(j);
				nextStr = datas.get(j + 1);
				//计算行合并单元格
				if(str.length<maxRow && i==str.length - 1){
					row = maxRow - str.length + 1;
				}
				//如果列的后一行为空不生成单元格
				if(i>str.length-1) {
				continue;
				};
				//如果下一列的后一行为空则下一行不是列合并单元格
				isColspan = i<nextStr.length;
				if(i>0){
					//如果当前不是第一行，则比较上一行是否相等
					isColspan = isColspan && str[i].equals(nextStr[i]) && str[i-1].equals(nextStr[i-1]);
				}else{
					isColspan = isColspan && str[i].equals(nextStr[i]);
				}

				if(isColspan){
					col++;
					//最后一行做特殊处理
					if(j==datas.size()-2){
//						System.out.printf("??<td rowspan=%s colspan=%s>%s</td>",row,col,nextStr[i]);
//						System.out.println();
						output = String.format(output,row,col,nextStr[i]);
						sb.append(output);
						//生成后重置单元格行列合并数
						row=1;
						col=1;
					}
				}else{
//					System.out.printf("<td rowspan=%s colspan=%s>%s</td>",row,col,str[i]);
//					System.out.println();
					output = String.format(output,row,col,str[i]);
					sb.append(output);
					//最后一行做特殊处理
					if(j==datas.size()-2){
//						System.out.printf("???<td>"+nextStr[i]+"</td>");
//						System.out.println();
						sb.append("<td rowspan=1 colspan=1>");
						sb.append(nextStr[i]);
						sb.append("<td >");
					}
					//生成后重置单元格行列合并数
					row=1;
					col=1;
				}
			}
			sb.append("</tr>");
		}
		sb.append("</table>");
		return sb.toString();
	}
}
